home *** CD-ROM | disk | FTP | other *** search
/ Chip 2002 June / ChipCD 6.02.iso / bonus / winamp3 / wa3install_beta3.exe / Scripts / Magnifier / scripts / magnifier.m next >
Text File  |  2002-01-31  |  4KB  |  159 lines

  1. #include "../../../lib/std.mi"
  2.  
  3. /*--------------------------------------------------------------------
  4.  Magnifier script
  5. --------------------------------------------------------------------*/
  6.  
  7. Class Layer Lens;
  8.  
  9. Global Int last_x, last_y;
  10. Function Lens makeNewLens(Layout l);
  11.  
  12. Global List layout_list;
  13. Global List Fx_list;
  14. Global Timer mTimer;
  15. Global Slider PrecisionSlider;
  16. Global Int Precision;
  17.  
  18. Global Lens Fx1, Fx2, Fx3, Fx4, Fx5, Fx6, Fx7, Fx8, Fx9, Fx10;
  19.  
  20. Class Timer Magnifier;
  21. Function int initFx(Layer _Fx);
  22.  
  23. Lens.fx_onGetPixelD(double r, double d, double x, double y) {
  24.   if (d < 0.6) return d*(sin(d)*2);
  25.   return d;
  26. }
  27.  
  28. Lens.fx_onGetPixelA(double r, double d, double x, double y) {
  29.   return cos(d*3.14159/1.25);
  30. }
  31.  
  32. System.onScriptUnloading() {
  33.   delete mTimer;
  34.   int i;
  35.   for (i=0;i<fx_list.getNumItems();i++) {
  36.     Layer l = fx_list.enumItem(i);
  37.     delete l;
  38.   }
  39.   delete Fx_list;
  40.   delete layout_list;
  41. }
  42.  
  43. System.onScriptLoaded() {
  44.  
  45.   PrecisionSlider = getContainer("magnifier.config").getLayout("normal").getObject("magnifier.config.slider");
  46.   Precision = getPrivateInt("magnifier", "precision", 10);
  47.   float f = 24-Precision;
  48.   PrecisionSlider.setPosition((f / 24.0) * 255.0);
  49.  
  50.   mTimer = new Timer;
  51.   mTimer.setDelay(20);
  52.   if (Precision != 0) mTimer.start();
  53.  
  54.   layout_list = new List;
  55.  
  56.   int i, j, c;
  57.   Fx_list = new List;
  58.  
  59.   for (i=0;i<getNumContainers();i++) {
  60.     if (!enumContainer(i).isDynamic()) 
  61.      for (j=0;j<enumContainer(i).getNumLayouts();j++) {
  62.       c = c + 1;
  63.       if (c <= 10) {
  64.         Layout l = enumContainer(i).enumLayout(j);
  65.         layout_list.addItem(l);
  66.         // eeek, i definitly need arrays, and switch... or maybe i need to make objects residing inside lists trap events, hmm..
  67.         Layer la = makeNewLens(l);
  68.  
  69.         if (c == 1) Fx1 = la;
  70.         if (c == 2) Fx2 = la;
  71.         if (c == 3) Fx3 = la;
  72.         if (c == 4) Fx4 = la;
  73.         if (c == 5) Fx5 = la;
  74.         if (c == 6) Fx6 = la;
  75.         if (c == 7) Fx7 = la;
  76.         if (c == 8) Fx8 = la;
  77.         if (c == 9) Fx9 = la;
  78.         if (c == 10) Fx10 = la;
  79.       }
  80.      }
  81.   }
  82. }
  83.  
  84. mTimer.onTimer() {
  85.   int i;
  86.   if (getMousePosX() == last_x && getMousePosY() == last_y) return;
  87.   for (i=0;i<layout_list.getNumItems();i++) {
  88.     if (!isObjectValid(layout_list.enumItem(i))) {
  89.       layout_list.removeItem(i);
  90. /*      Layer f = fx_list.enumItem(i);
  91.       delete f; */  // was deleted by parent
  92.       fx_list.removeItem(i);
  93.       i--;
  94.       continue;
  95.     }
  96.     Layout l = layout_list.enumItem(i); // assign only now because assignment validates pointer and would return NULL
  97.     int x = l.getMousePosX();
  98.     int y = l.getMousePosY();
  99.     Layer thisFx = Fx_list.enumItem(i);
  100.     if (x < -50 || x > l.getWidth()+50 || y < -50 || y > l.getHeight()+50) {
  101.       if (thisFx.fx_getEnabled())
  102.         thisFx.fx_setEnabled(0);
  103.     } else {
  104.       if (!thisFx.fx_getEnabled())
  105.         thisFx.fx_setEnabled(1);
  106.     thisFx.resize(x-50, y-50, 100, 100);
  107.     }
  108.   last_x = getMousePosx();
  109.   last_y = getMousePosY();
  110.   }
  111. }
  112.  
  113. int initFx(Layer _Fx) {
  114.   Fx_list.addItem(_Fx);
  115.   _Fx.fx_setBgFx(1);
  116.   _Fx.fx_setWrap(0);
  117.   _Fx.fx_setBilinear(1);
  118.   _Fx.fx_setGridSize(Precision,Precision);
  119.   _Fx.fx_setRect(0);
  120.   _Fx.fx_setClear(0);
  121.   _Fx.fx_setLocalized(1);
  122.   _Fx.fx_setRealtime(0);
  123.   _Fx.fx_setAlphaMode(2); // 2 asks alpha only once
  124.   return 0;
  125. }
  126.  
  127. Lens makeNewLens(Layout l) {
  128.   Lens la = new Layer;
  129.   la.setXmlParam("x", "-51");
  130.   la.setXmlParam("y", "-51");
  131.   la.setXmlParam("image", "script.magnifier.transparent50x50");
  132.   la.setXmlParam("ghost", "1");
  133.   la.init(l);
  134.   initFx(la);
  135.   return la;
  136. }
  137.  
  138. PrecisionSlider.onSetPosition(int p) {
  139.   float f = p;
  140.   p = 24-((f / 255.0) * 24.0);
  141.   for (int i=0;i<fx_list.getNumItems();i++) {
  142.     Lens fx = fx_list.enumItem(i);
  143.     fx.fx_setGridSize(p, p);
  144.     if (p == 0) {
  145.       fx.fx_setEnabled(0);
  146.       mTimer.stop();
  147.     } else {
  148.       if (Precision == 0)
  149.         mTimer.start();
  150.       if (fx.fx_getEnabled()) {
  151.         fx.fx_setEnabled(0);
  152.         fx.fx_setEnabled(1);
  153.       }
  154.     }
  155.   }
  156.   setPrivateInt("magnifier", "precision", p);
  157.   Precision = p;
  158. }
  159.